1
現代抽象:函數式 Rust 的力量
AI034Lesson 13
00:00

現代的 Rust 借助 函數式程式設計 原則來提供 零成本抽象。透過將函數視為值、資料視為不可變流,Rust 能夠實現富有表現力的 輸入/輸出操作 且不犧牲效能。

1. 環境與閉包

與標準函數不同,閉包可以 捕獲其環境。它們使用 FnFnMutFnOnce 特性來管理 閉包中的所有權轉移,以確保即使函數攜帶狀態時,記憶體安全也能得到維護。

let v1 = vec![1, 2, 3];
let v1_iter = v1.iter().map(|x| x + 1);
// v1_iter 是惰性的,尚未執行!

2. 宣告式管道

透過使用 迭代器適配器,開發者可將冗長的巢狀迴圈替換為簡潔的邏輯。 iter_mut 方法 允許進行安全的原地函數轉換,同時編譯器會將這些高階呼叫優化為與手寫迴圈相匹配的組合語言。

函數式管道contents.lines().filter(|l| l.contains(q)).collect()安全網錯誤 [E0502]:無法借用「list」作為不可變值,因為...🦀?

3. 性能基準測試

當在 開發設定檔 或釋出模式下編譯時, search 函數證明了其效率。統計基準測試顯示: test bench_search_iter ... 測試:19,234,900 納秒/次。這證實了這些抽象確實是零成本的。

⚠️ 編譯器警告
警告:未使用的 `Map` 必須被使用。迭代器是惰性的;除非被像 collect()sum()這樣的消費方法調用,否則什麼都不會做。
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>